package service

import (
	"github.com/wzh200x/hyperNexus/hyperNexusProtocol/commonProtocol"
	"github.com/wzh200x/webServer/constants"
	Server "github.com/wzh200x/webServer/server"
)

// 获取区服信息请求结构
type GetCenterRequest struct {
	// 不需要额外参数，使用当前登录用户信息
}

// 更新区服信息请求结构
type UpdateCenterRequest struct {
	Data []int32 `json:"data" form:"data" binding:"required"` // 区服数据
}

// 区服信息响应结构
type CenterResponse struct {
	Data []int32 `json:"data"` // 区服数据
}

// GetCenter 获取区服信息
func GetCenter(userID uint, username string) (*CenterResponse, int, string) {
	// 获取DbAgentServerClient
	dbAgentClient := Server.ServerApp.DbAgentServerClient.GetClientProxy()

	// 构建查询参数
	centerQuery := commonProtocol.CenterQuery{
		Account: username,
	}

	// 查询区服信息
	center, queryErr := dbAgentClient.QueryCenter(centerQuery)
	if queryErr != nil {
		// 如果是记录不存在，则创建一个新的区服信息
		if queryErr.Error() == "record not found" {
			// 创建新的区服信息
			newCenter := commonProtocol.Center{
				Account: username,
				Data:    []int32{}, // 初始化为空数组
			}

			// 调用DbAgentServer创建区服信息
			createdCenter, createErr := dbAgentClient.CreateCenter(newCenter)
			if createErr != nil {
				return nil, constants.ErrUnknown, "创建区服信息失败: " + createErr.Error()
			}

			// 返回新创建的区服信息
			return &CenterResponse{
				Data: createdCenter.Data,
			}, 0, ""
		}

		return nil, constants.ErrUnknown, "查询区服信息失败: " + queryErr.Error()
	}

	// 返回区服信息
	return &CenterResponse{
		Data: center.Data,
	}, 0, ""
}

// UpdateCenter 更新区服信息
func UpdateCenter(userID uint, username string, req UpdateCenterRequest) (*CenterResponse, int, string) {
	// 获取DbAgentServerClient
	dbAgentClient := Server.ServerApp.DbAgentServerClient.GetClientProxy()

	// 构建查询参数
	centerQuery := commonProtocol.CenterQuery{
		Account: username,
	}

	// 查询区服信息
	center, queryErr := dbAgentClient.QueryCenter(centerQuery)
	if queryErr != nil {
		// 如果是记录不存在，则创建一个新的区服信息
		if queryErr.Error() == "record not found" {
			// 创建新的区服信息
			newCenter := commonProtocol.Center{
				Account: username,
				Data:    req.Data, // 使用请求中的数据
			}

			// 调用DbAgentServer创建区服信息
			createdCenter, createErr := dbAgentClient.CreateCenter(newCenter)
			if createErr != nil {
				return nil, constants.ErrUnknown, "创建区服信息失败: " + createErr.Error()
			}

			// 返回新创建的区服信息
			return &CenterResponse{
				Data: createdCenter.Data,
			}, 0, ""
		}

		return nil, constants.ErrUnknown, "查询区服信息失败: " + queryErr.Error()
	}

	// 更新区服数据
	center.Data = req.Data

	// 调用DbAgentServer更新区服信息
	updatedCenter, updateErr := dbAgentClient.UpdateCenter(center)
	if updateErr != nil {
		return nil, constants.ErrUnknown, "更新区服信息失败: " + updateErr.Error()
	}

	// 返回更新后的区服信息
	return &CenterResponse{
		Data: updatedCenter.Data,
	}, 0, ""
}
